package com.goodcol.plugin.entity;

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.intellij.psi.PsiField;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 从Java实体类生成时，构造的ColumnInfo对象
 *
 * @author 单红宇
 * @date 2024/2/1 12:10
 */
@Data
@EqualsAndHashCode(callSuper = true)
@AllArgsConstructor
public class ClassFieldColumnInfo extends ColumnInfo {

    /**
     * 原始对象
     */
    @JsonIgnore
    private final PsiField obj;

    @Override
    public String getColumnName() {
        //  尝试从@Column等相关注解中解析获取字段名称，如果不存在相关注解配置，则默认返回Java属性名称
        return obj.getName();
    }

    @Override
    public Object getObj() {
        return this.obj;
    }

    @Override
    public String getJdbcType() {
        // Java实体类中的属性上不会配置jdbcType相关的注解，这里默认返回空值
        return "";
    }

    @Override
    public Integer getTypeLength() {
        // 从字段的相关validate注解上解析尝试获取长度，如果获取不到，默认返回-1
        return -1;
    }

    @Override
    public Boolean getIsNotNull() {
        // 从字段的相关validate注解上解析尝试获取是否可为空，如果获取不到，默认返回false
        return false;
    }

    @Override
    public String getOriginComment() {
        return this.getComment();
    }
}
